/**
 * 调用 DB 类，数据存储在自己的命名空间下，避免 localStorage、sessionStorage 相互覆盖
 * @params {String} name，命名空间名称
 * @example:
 *    引入：Vue.prototype.db = new DB('namespace')
 *    写入 localStorage：this.$db.setLocal('itemName', value)
 *    获取自 localStorage: this.$db.getLocal('itemName')
 *    写入 sessionStorage: this.$db.setSession('itemName', value)
 *    获取自 sessionStorage: this.$db.getSession('itemName')
 */
class DB {
  constructor(name) {
    this.name = name
  }

  get localDB() {
    let data = localStorage.getItem(this.name)
    data = data ? JSON.parse(data) : {}
    return data
  }

  getLocal(name) {
    const db = this.localDB
    return db[name]
  }

  setLocal(name, value) {
    const db = this.localDB
    db[name] = value
    localStorage.setItem(this.name, JSON.stringify(db))
  }

  get sessionDB() {
    let data = sessionStorage.getItem(this.name)
    data = data ? JSON.parse(data) : {}
    return data
  }

  getSession(name) {
    const db = this.sessionDB
    return db[name]
  }

  setSession(name, value) {
    const db = this.sessionDB
    db[name] = value
    sessionStorage.setItem(this.name, JSON.stringify(db))
  }
}

export default DB
